import { instance } from '@/common/tools/axios';
import { Table } from '@/common/SDK/interface';
import { parseTime } from '@/common/SDK/utils';
export class Share {
    //实列对象
    private shareCode: object | null = null;
    //请求api
    protected BASE_API:any = {
        /*邀新统计数据 | 赛事统计数据 type 1 2*/
        'API_ADMIN_SHARE_STATS' : '/api/admin/share/stats',
        /*配置枚举*/
        'DEBUG_DEVELOPER_CONSTANTS': '/debug/developer/constants/',
        /*邀新分享列表 | 赛事分享列表 type 1 2*/
        'API_ADMIN_SHARE': '/api/admin/share',
        /*邀新加入列表 | 赛事加入列表 type 1 2*/
        'API_ADMIN_SHARE_USER': '/api/admin/share/user'
    }
    //分享用户
    readonly shareUser:object[] =  [{
        title: "序号",
        props: 'id'
    } as Table,{
        title: "时间",
        props: 'created_at'
    } as Table,{
        title: "分享用户ID",
        props: 'userId'
    } as Table,{
        title: "分享链接",
        props: 'code',
    } as Table]
    //加入用户
    readonly joinUser:object[] = [{
        title: "序号",
        props: 'id'
    } as Table,{
        title: "时间",
        props: 'created_at'
    } as Table,{
        title: "加入用户ID",
        props: 'joinId'
    } as Table,{
        title: "加入链接",
        props: 'joinLink'
    } as Table];

    /*时间数据*/
    public _TIME_ = {
        start_at: null,
        ended_at: null
    } as any;

    /*分享配置数据*/
    public CONFIG_DATA:Array<object> | null = null;
    /*统计今天数据*/
    public STAT_DAY_DATA:Array<object> | null = null;
    /*表数据*/
    public STAT_CHART_DATA:any = {
        day: [] as object[],
        value: [] as object[]
    };

    /*总数据*/
    public STAT_SUM_DATA:Array<object> | null = null;
    /*用户加入 | 用户分享 数据列表*/
    public SHARE_LIST = {
        data: null as null | object[],
        total: null as null | object[]
    };

    /*构造函数*/
    constructor(shareCode:object | null) {
        this.shareCode = shareCode;
    }

    getShareTemp(config:any):any{
        return instance({
            url: this.BASE_API.DEBUG_DEVELOPER_CONSTANTS + config,
            method: 'GET',
        })
    }

    //
    // /**
    //  * 获取统计数据
    //  * 是否按照天数分组
    //  * @param { Object } query
    //  * 不传值拿今天到今天的时间 传值 拿今天到指定几天的时间
    //  * @param { Number } day
    //  * 获取类型今天 | 总体 | 和表数据
    //  * @param { String } type
    //  */
    getShareData(query:any ,day= 0 ,type:string){
        this._TIME_['start_at'] = '';
        this._TIME_['ended_at'] = '';
        if(query.group || type === 'today') {
            this._TIME_.start_at = this.getTime(day);
            this._TIME_.ended_at = this.getTime();
        }
        const obj = Object.assign(query,this._TIME_);
        this.getStatConfig(obj)
        .then(res=>{
            switch (type) {
                case 'sum'://总体
                    this.STAT_SUM_DATA = toArray(res.data);
                    break;
                case 'today'://今天
                    this.STAT_DAY_DATA = toArray(res.data);
                    break;
                default: //表数据
                    let list = {
                        day: [],
                        value: []
                    };
                    for(let key in res.data) {
                        list.day.push(key);
                        list.value.push(res.data[key].invited);
                    }
                    this.STAT_CHART_DATA.day = list.day;
                    this.STAT_CHART_DATA.value = list.value;
            }
        })
    }

    /**
     * 获取统计配置信息
     * 是否按照天数分组
     * @param { Boolean } group
     * 开始日期（2021-07-01）
     * @param { Date } start_at
     * 结束日期（2021-07-01）
     * @param { Date } ended_at
     * 类型 赛事 | 邀新 enum
     * @param { String } type
     */
    getStatConfig({group,start_at,ended_at,type}:any = {}):any{
        let params = {
            group,
            start_at,
            ended_at,
            type
        }
        return instance({
            url: this.BASE_API.API_ADMIN_SHARE_STATS,
            method: 'GET',
            params
        })
    }

    /**
     * 获取分享配置
     * @param { String } url
     * 类型
     * @param { Number } type
     */
    getShareConfig(url,type) {
        let params = {
            type
        }
        instance({
            url,
            method: 'GET',
            params
        })
        .then(res=>{
            if(type === this.INVITE_TYPE) {
                res.data.ended = parseTime(new Date(res.data.ended).toUTCString());
                res.data.start = parseTime(new Date(res.data.start).toUTCString());
                this.CONFIG_DATA = toArray(res.data);
            } else {
                this.CONFIG_DATA = toArray(res.data);
            }
        })
    }

    /**
     * 获取用户分享列表
     * 获取类型
     * @param { Number } type
     * 查询参数
     * @param { Object } listQuery
     */
    getShareUser(type,listQuery) {
        let params = {
            type,
            ...listQuery
        };
        request({
            url: this.BASE_API.API_ADMIN_SHARE,
            method: 'GET',
            params
        })
        .then(res=>{
            let list = res.data.data;
            list.forEach((item)=>{
                item.userId = item.user?.id ? item.user.id : '/';
            })
            this.SHARE_LIST['data'] = list;
            this.SHARE_LIST['total'] = res.data.meta.total;
        })
    }

    // /**
    //  * 获取加入用户列表
    //  * 枚举类型
    //  * @param { Number } type
    //  * 查询参数
    //  * @param { Object } listQuery
    //  */
    // getJoinUser(type,listQuery){
    //     let params = {
    //         type,
    //         ...listQuery
    //     };
    //     request({
    //         url: this.BASE_API.API_ADMIN_SHARE_USER,
    //         method: 'GET',
    //         params
    //     })
    //         .then(res=>{
    //             let list = res.data.data;
    //             list.forEach((item)=>{
    //                 item.joinId = item.user?.id ? item.user.id : '/';
    //                 item.joinLink = item.user?.avatar ? item.user.avatar : '/';
    //             })
    //             this.SHARE_LIST['data'] = list;
    //             this.SHARE_LIST['total'] = res.data.meta.total;
    //         })
    // }
    //
    // /**
    //  * 修改分享配置
    //  * @param { String } url
    //  * 参数
    //  * @param { Object } data
    //  */
    // updateShareConfig(url,data){
    //     return request({
    //         url,
    //         method: 'POST',
    //         data
    //     })
    // }
    /**
     * 获取时间
     * 天数
     * @param { Number } num
     * @returns { string }
     */
    getTime(num = 0){
        const date = new Date()
        if(num) {
            date.setDate(date.getDate() + num);
        }
        return parseTime(date,'{y}-{m}-{d}')
    }
}
